package gongju;

import java.sql.*;

/**
 * 这是一个数据库的工具类，可以将注册驱动，连接对象，查询，添，删，改都封装成相应的方法
 */
public class DBUtil {
    //1.5 设置主机，端口号，数据库，关闭SSL，启用Unicode和utf8 、用户名，密码
    private static final String url="jdbc:mysql://localhost:3306/student_db?useSSL=false&useUnicode=true&characterEncoding=utf8";
    private static final String name="root";
    private static final String pwd = "root";


    // 用静态代码块，注册驱动
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    // 获取连接对象
    public static Connection getConn() throws SQLException {
        //2 获取连接的对象conn
        Connection conn = DriverManager.getConnection(url, name, pwd);// Alt+回车
        return conn;
    }

    //

    /**
     * 通用的查询方法
     * @param sql 接收的SQL语句
     * @return 将查询的结果集返回给调用者
     * String ...keys ：...表示可变的参数，0个或是任意个数的参数都可以
     */
    public static ResultSet query(String sql,String ...keys) throws SQLException {
        Connection conn = getConn();
        PreparedStatement pst = conn.prepareStatement(sql);
        // 设置？的值
        // pst.setString(1,userid);
        // pst.setString(2,username);
        for (int i = 0; i < keys.length; i++) {
            // String key = keys[i];// id ,name
            pst.setString((i+1),keys[i]);
        }
        ResultSet rst = pst.executeQuery();
        return rst;
    }


    // 通用的update
    public static int update(String sql,String ...keys) throws SQLException {
        Connection conn = getConn();
        PreparedStatement pst = conn.prepareStatement(sql);
        // 设置？的值
        // pst.setString(1,userid);
        // pst.setString(2,username);
        for (int i = 0; i < keys.length; i++) {
            // String key = keys[i];// id ,name
            pst.setString((i+1),keys[i]);
        }
        int i = pst.executeUpdate();
        return i;
    }



    // 通用的释放资源的方法
    public static void close(Connection conn,PreparedStatement pst,ResultSet rst) throws SQLException {
        if (rst!=null){
            rst.close();
        }
        if (pst!=null){
            pst.close();
        }
        if (conn!=null){
            conn.close();
        }
    }
}
